package com.wctj.api.business.huifu.service;

import com.wctj.api.base.Result;
import com.wctj.api.business.common.dto.PayOrderDTO;
import com.wctj.api.business.common.dto.PaymentIdDTO;
import com.wctj.api.business.huifu.dto.HuiFuCorpMemberUserDTO;
import com.wctj.api.business.huifu.dto.HuiFuMemberUserDTO;
import com.wctj.api.business.huifu.dto.HuiFuQueryMemberUserDTO;
import com.wctj.api.infra.common.api.DefaultPayMessageHandler;
import com.wctj.api.infra.common.api.PayMessageHandler;
import com.wctj.api.infra.huifu.dto.CorpMemberUserResponse;
import com.wctj.api.infra.huifu.dto.MemberUserResponse;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface HuiFuPayManagerService {

    /**
     * 跳到支付页面
     * 针对实时支付
     * @param param
     * @param payOrderNum
     * @return 跳到支付页面
     */
    Result toPay(PayOrderDTO param, String payOrderNum) ;

    /**
     * 支付回调地址
     *
     * @param request 请求
     * @return 是否成功
     * <p>
     * 业务处理在对应的PayMessageHandler里面处理，在哪里设置PayMessageHandler，详情查看{ com.zgzg.shop.pay.common.api.PayService#setPayMessageHandler(com.zgzg.shop.pay.common.api.PayMessageHandler)}
     * <p>
     * 如果未设置 {@link PayMessageHandler} 那么会使用默认的 {@link DefaultPayMessageHandler}
     * @throws IOException IOException
     */
     String payBack(HttpServletRequest request);

    /**
     * 根据第三方平台的支付订单号查询第三方平台的支付对象信息
     * @param paymentId
     * @return
     */
    Map<String, Object> infoByPaymentId(PaymentIdDTO paymentId);

    /**
     * 创建实名用户对象
     * @param param
     * @return
     */
    Result<MemberUserResponse> createPersonalUser(HuiFuMemberUserDTO param);

    /**
     *查询已创建的单个用户对象
     * @param param
     * @return
     */
    Result<MemberUserResponse> queryPersonalUser(HuiFuQueryMemberUserDTO param);

    /**
     * 查询商户应用 id 下已创建的用户对象列表
     * @param param
     * @return
     */
    Result<List<MemberUserResponse>> listPersonalUser(HuiFuQueryMemberUserDTO param);

    /**
     * 企业用户（ Member）-创建企业用户对象
     * @param param
     * @return
     */
    Result<CorpMemberUserResponse> createCorpMember(HuiFuCorpMemberUserDTO param);
}
